﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WF_Office_Verwaltung
{
    public partial class frm_Berichte : Form
    {
        nachrichten_klasse nk_klasse = new nachrichten_klasse();
        helfer_klasse helferKlasse = new helfer_klasse();
        public frm_Berichte()
        {
            InitializeComponent();
            using (var context = new project_entities())
            {
                cb_Techniker_WV.DataSource = context.Techniker.ToList();
                cb_Techniker_WV.ValueMember = "ID_Techniker";
                cb_Techniker_WV.DisplayMember = "Vorname";
            }
        }

        private void btn_Abfragen_Click(object sender, EventArgs e)
        {
            using (var context = new project_entities())
            {
                if (rb_Kunde_mit_WV.Checked)
                {
                    var resultset = context.sp_all_WV_by_Kunde().ToArray();
                    write_result_to_csv(resultset);
                }
                else if (rb_Kunden_ohne_WV.Checked)
                {
                    var resultset = context.sp_Kunden_ohne_WV().ToArray();
                    write_result_to_csv(resultset);
                }
                else if (rb_Technicker_zu_Kunde.Checked)
                {
                    var resultset = context.sp_Techniker_zu_Kunde().ToArray();
                    write_result_to_csv(resultset);
                }
                else if (rb_Wartungen.Checked)
                {
                    string sVon = mtb_von_Tag_WV.Text + "." + mtb_von_Monat_WV.Text + "." + mtb_von_Jahr_WV.Text;
                    string sBis = mtb_bis_Tag_WV.Text + "." + mtb_bis_monat_WV.Text + "." + mtb_bis_jahr_WV.Text;

                    if (check_Datum(sVon, sBis))
                    {
                        DateTime von = DateTime.Parse(mtb_von_Tag_WV.Text + "." + mtb_von_Monat_WV.Text + "." + mtb_von_Jahr_WV.Text);
                        DateTime bis = DateTime.Parse(mtb_bis_Tag_WV.Text + "." + mtb_bis_monat_WV.Text + "." + mtb_bis_jahr_WV.Text);
                        var resultset = context.sp_Wartungen_Zeitraum(von, bis).ToArray();
                        write_result_to_csv(resultset, von, bis);

                    }
                }
                else if (rb_Wartungen_mit_Techniker.Checked)
                {
                    DateTime von = DateTime.Parse(mtb_von_tag_WV_Techniker.Text + "." + mtb_von_monat_WV_Techniker.Text + "." + mtb_von_jahr_WV_Techniker.Text);
                    DateTime bis = DateTime.Parse(mtb_bis_Tag_WV_Techniker.Text + "." + mtb_bis_monat_WV_Techniker.Text + "." + mtb_bis_jahr_WV_Techniker.Text);
                    string techniker = cb_Techniker_WV.Text;
                    var resultset = context.sp_Wartungen_Zeitraum_inkl_Techniker(von, bis, techniker).ToArray();
                    write_result_to_csv(resultset, von, bis, techniker);
                }
                else if (rb_Neugeräte.Checked)
                {
                    DateTime von = DateTime.Parse(mtb_von_tag_NG.Text + "." + mtb_von_monat_NG.Text + "." + mtb_von_jahr_NG.Text);
                    DateTime bis = DateTime.Parse(mtb_bis_Tag_NG.Text + "." + mtb_bis_monat_NG.Text + "." + mtb_bis_jahr_NG.Text);
                    var resultset = context.sp_Neugeräte_nachDatum(von, bis).ToArray();
                    write_result_to_csv(resultset, von, bis);
                }
                else if (rb_Rechnungen.Checked)
                {
                    DateTime von = DateTime.Parse(mtb_von_tag_RG.Text + "." + mtb_von_monat_RG.Text + "." + mtb_von_jahr_RG.Text);
                    DateTime bis = DateTime.Parse(mtb_bis_Tag_RG.Text + "." + mtb_bis_monat_RG.Text + "." + mtb_bis_jahr_RG.Text);
                    var resultset = context.sp_Rechnungen_nachDatum(von, bis).ToArray();
                    write_result_to_csv(resultset, von, bis);
                }
                else if (rb_Abgasmessung.Checked)
                {
                    DateTime von = DateTime.Parse(mtb_von_tag_Abgasmess.Text + "." + mtb_von_monat_Abgasmess.Text + "." + mtb_von_jahr_Abgasmess.Text);
                    DateTime bis = DateTime.Parse(mtb_bis_tag_Abgasmess.Text + "." + mtb_bis_monat_Abgasmess.Text + "." + mtb_bis_jahr_Abgasmess.Text);
                    var resultset = context.sp_fällige_Abgasmessunge(von, bis).ToArray();
                    write_result_to_csv(resultset, von, bis);
                }

            }

        }

        private void write_result_to_csv(sp_fällige_Abgasmessunge_Result1[] resultset, DateTime von, DateTime bis)
        {
            try
            {
                string Anrede;
                string pfad = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //Path.GetTempPath();
                string timestemp = getFileDateTime();

                string filename = timestemp + "Gültige_Abgasmessung_im_Zeitraum" + von.ToShortDateString() + "_" + bis.ToShortDateString() + ".csv";
                using (StreamWriter file = new StreamWriter(pfad + "\\" + filename))
                {

                    file.Write("Gültig Bis, Kundennummer, Anrede, Titel, Vorname, Nachname, Adresse, PLZ, Ort, Mobil, Festnetz, FaxNummer, Email, Wartungsvertrag, Vertragsabschluss, Techniker \n ");
                    foreach (var item in resultset)
                    {
                        if (item.Anrede)
                        {
                            Anrede = "Herr";
                        }
                        else
                        {
                            Anrede = "Frau";
                        }
                        string Kundennummer = helferKlasse.kundenNr(item.Kundennummer);
                        file.Write(item.Gültig_bis + "," + Kundennummer + "," + Anrede + "," + item.Titel + "," + item.Vorname + "," + item.Nachname + "," + item.Adresse + "," + item.PLZ + "," + item.Ort + "," + item.Mobil + "," + item.Festnetz + "," + item.FaxNummer + "," + item.Email + "\n ");
                    }

                }
                MessageBox.Show("Der Bericht ist Fertig und befindet sich auf: " + pfad + "\\" + filename);
            }
            catch (Exception ex)
            {
                nk_klasse.ErrorMessage("write_result_to_csv sp_fällige_Abgasmessunge_Result", ex);

            }
        }
        private void write_result_to_csv(sp_Rechnungen_nachDatum_Result1[] resultset, DateTime von, DateTime bis)
        {
            try
            {
                string Anrede;
                string pfad = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //Path.GetTempPath();
                string timestemp = getFileDateTime();

                string filename = timestemp + "_Rechnungen_im_Zeitraum" + von.ToShortDateString() + "_" + bis.ToShortDateString() + ".csv";
                using (StreamWriter file = new StreamWriter(pfad + "\\" + filename))
                {

                    file.Write("Rechnung, Datum, Kundennummer, Anrede, Titel, Vorname, Nachname, Adresse, PLZ, Ort, Mobil, Festnetz, FaxNummer, Email, Wartungsvertrag, Vertragsabschluss, Techniker \n ");
                    foreach (var item in resultset)
                    {
                        if (item.Anrede)
                        {
                            Anrede = "Herr";
                        }
                        else
                        {
                            Anrede = "Frau";
                        }
                        string Kundennummer = helferKlasse.kundenNr(item.Kundennummer);
                        file.Write(item.Name + "," + item.Datum + "," + Kundennummer + "," + Anrede + "," + item.Titel + "," + item.Vorname + "," + item.Nachname + "," + item.Adresse + "," + item.PLZ + "," + item.Ort + "," + item.Mobil + "," + item.Festnetz + "," + item.FaxNummer + "," + item.Email + "\n ");
                    }

                }
                MessageBox.Show("Der Bericht ist Fertig und befindet sich auf: " + pfad + "\\" + filename);
            }
            catch (Exception ex)
            {
                nk_klasse.ErrorMessage("write_result_to_csv Kunde_ohne_WV_Result", ex);
            }

        }

        private void write_result_to_csv(sp_Neugeräte_nachDatum_Result1[] resultset, DateTime von, DateTime bis)
        {
            try
            {
                string Anrede;
                string pfad = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //Path.GetTempPath();
                string timestemp = getFileDateTime();

                string filename = timestemp + "_Neugeräte_im_Zeitraum" + von.ToShortDateString() + "_" + bis.ToShortDateString() + ".csv";
                using (StreamWriter file = new StreamWriter(pfad + "\\" + filename))
                {

                    file.Write("Neugerät, Datum, Kundennummer, Anrede, Titel, Vorname, Nachname, Adresse, PLZ, Ort, Mobil, Festnetz, FaxNummer, Email, Wartungsvertrag, Vertragsabschluss, Techniker \n ");
                    foreach (var item in resultset)
                    {
                        if (item.Anrede)
                        {
                            Anrede = "Herr";
                        }
                        else
                        {
                            Anrede = "Frau";
                        }
                        string Kundennummer = helferKlasse.kundenNr(item.Kundennummer);
                        file.Write(item.Name + "," + item.Datum + "," + Kundennummer + "," + Anrede + "," + item.Titel + "," + item.Vorname + "," + item.Nachname + "," + item.Adresse + "," + item.PLZ + "," + item.Ort + "," + item.Mobil + "," + item.Festnetz + "," + item.FaxNummer + "," + item.Email + "\n ");
                    }

                }
                MessageBox.Show("Der Bericht ist Fertig und befindet sich auf: " + pfad + "\\" + filename);
            }
            catch (Exception ex)
            {
                nk_klasse.ErrorMessage("write_result_to_csv Kunde_ohne_WV_Result", ex);
            }
        }

        private void write_result_to_csv(sp_Wartungen_Zeitraum_inkl_Techniker_Result2[] resultset, DateTime von, DateTime bis, string techniker)
        {
            try
            {
                string Anrede;
                string pfad = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //Path.GetTempPath();
                string timestemp = getFileDateTime();

                string filename = timestemp + "_Wartungen_des_Zeitraums" + von.ToShortDateString() + "_" + bis.ToShortDateString() + "_" + techniker + ".csv";
                using (StreamWriter file = new StreamWriter(pfad + "\\" + filename))
                {

                    file.Write("Kundennummer, Anrede, Titel, Vorname, Nachname, Adresse, PLZ, Ort, Mobil, Festnetz, FaxNummer, Email, Wartungsvertrag, Vertragsabschluss, Techniker \n ");
                    foreach (var item in resultset)
                    {
                        if (item.Anrede)
                        {
                            Anrede = "Herr";
                        }
                        else
                        {
                            Anrede = "Frau";
                        }
                        string Kundennummer = helferKlasse.kundenNr(item.Kundennummer);
                        file.Write(Kundennummer + "," + Anrede + "," + item.Titel + "," + item.Vorname + "," + item.Nachname + "," + item.Adresse + "," + item.PLZ + "," + item.Ort + "," + item.Mobil + "," + item.Festnetz + "," + item.FaxNummer + "," + item.Email + "," + item.Wartungsvertrag + "," + item.Vertragsabschluss + "," + item.Techniker + "\n ");
                    }

                }
                MessageBox.Show("Der Bericht ist Fertig und befindet sich auf: " + pfad + "\\" + filename);
            }
            catch (Exception ex)
            {
                nk_klasse.ErrorMessage("write_result_to_csv Kunde_ohne_WV_Result", ex);
            }

        }

        private void write_result_to_csv(sp_Wartungen_Zeitraum_Result2[] resultset, DateTime von, DateTime bis)
        {
            try
            {
                string Anrede;
                string pfad = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //Path.GetTempPath();
                string timestemp = getFileDateTime();

                string filename = timestemp + "_Wartungen_des_Zeitraums" + von.ToShortDateString() + "_" + bis.ToShortDateString() + ".csv";
                using (StreamWriter file = new StreamWriter(pfad + "\\" + filename))
                {

                    file.Write("Anrede, Titel, Vorname, Nachname, Adresse, PLZ, Ort, Mobil, Festnetz, FaxNummer, Email, Wartungsvertrag, Vertragsabschluss \n ");
                    foreach (var item in resultset)
                    {
                        if (item.Anrede)
                        {
                            Anrede = "Herr";
                        }
                        else
                        {
                            Anrede = "Frau";
                        }
                        string Kundennummer = helferKlasse.kundenNr(item.Kundennummer);
                        file.Write(Kundennummer + "," + Anrede + "," + item.Titel + "," + item.Vorname + "," + item.Nachname + "," + item.Adresse + "," + item.PLZ + "," + item.Ort + "," + item.Mobil + "," + item.Festnetz + "," + item.FaxNummer + "," + item.Email + "," + item.Wartungsvertrag + "," + item.Vertragsabschluss + "\n ");
                    }

                }
                MessageBox.Show("Der Bericht ist Fertig und befindet sich auf: " + pfad + "\\" + filename);
            }
            catch (Exception ex)
            {
                nk_klasse.ErrorMessage("write_result_to_csv Kunde_ohne_WV_Result", ex);
            }
        }

        private void write_result_to_csv(sp_Techniker_zu_Kunde_Result1[] resultset)
        {
            try
            {
                string Anrede;
                string pfad = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //Path.GetTempPath();
                string timestemp = getFileDateTime();

                string filename = timestemp + "_Technikerzugehörigkeit_zu_Kunden.csv";
                using (StreamWriter file = new StreamWriter(pfad + "\\" + filename))
                {

                    file.Write("Techniker, Anrede, Titel, Vorname, Nachname, Adresse, PLZ, Ort, Mobil, Festnetz, FaxNummer, Email \n");
                    foreach (var item in resultset)
                    {
                        if (item.Anrede)
                        {
                            Anrede = "Herr";
                        }
                        else
                        {
                            Anrede = "Frau";
                        }
                        string Kundennummer = helferKlasse.kundenNr(item.Kundennummer);
                        file.Write(item.Techniker + "," + Kundennummer + "," + Anrede + "," + item.Titel + "," + item.Vorname + "," + item.Nachname + "," + item.Adresse + "," + item.PLZ + "," + item.Ort + "," + item.Mobil + "," + item.Festnetz + "," + item.FaxNummer + "," + item.Email + "\n ");
                    }

                }
                MessageBox.Show("Der Bericht ist Fertig und befindet sich auf: " + pfad + "\\" + filename);
            }
            catch (Exception ex)
            {
                nk_klasse.ErrorMessage("write_result_to_csv Kunde_ohne_WV_Result", ex);
            }

        }

        private void write_result_to_csv(sp_Kunden_ohne_WV_Result1[] resultset)
        {

            try
            {
                string Anrede;
                string pfad = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //Path.GetTempPath();
                string timestemp = getFileDateTime();

                string filename = timestemp + "_Kunden_ohne_Wartungsverträge.csv";
                using (StreamWriter file = new StreamWriter(pfad + "\\" + filename))
                {

                    file.Write("Anrede, Titel, Vorname, Nachname, Adresse, PLZ, Ort, Mobil, Festnetz, FaxNummer, Email \n");
                    foreach (var item in resultset)
                    {
                        if (item.Anrede)
                        {
                            Anrede = "Herr";
                        }
                        else
                        {
                            Anrede = "Frau";
                        }
                        string Kundennummer = helferKlasse.kundenNr(item.Kundennummer);
                        file.Write(Kundennummer + "," + Anrede + "," + item.Titel + "," + item.Vorname + "," + item.Nachname + "," + item.Adresse + "," + item.PLZ + "," + item.Ort + "," + item.Mobil + "," + item.Festnetz + "," + item.FaxNummer + "," + item.Email + "\n ");
                    }

                }
                MessageBox.Show("Der Bericht ist Fertig und befindet sich auf: " + pfad + "\\" + filename);
            }
            catch (Exception ex)
            {
                nk_klasse.ErrorMessage("write_result_to_csv Kunde_ohne_WV_Result", ex);
            }
        }

        private void write_result_to_csv(sp_all_WV_by_Kunde_Result1[] resultset)
        {

            try
            {
                string Anrede;
                string pfad = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //Path.GetTempPath();
                string timestemp = getFileDateTime();

                string filename = timestemp + "_Kunden_mit_Wartungsverträge.csv";
                using (StreamWriter file = new StreamWriter(pfad + "\\" + filename))
                {

                    file.Write("Anrede, Titel, Vorname, Nachname, Adresse, PLZ, Ort, Mobil, Festnetz, FaxNummer, Email, Wartungsvertrag, Vertragsabschluss, Techniker \n");
                    foreach (var item in resultset)
                    {
                        if (item.Anrede)
                        {
                            Anrede = "Herr";
                        }
                        else
                        {
                            Anrede = "Frau";
                        }
                        string Kundennummer = helferKlasse.kundenNr(item.Kundennummer);
                        file.Write(Kundennummer + "," + Anrede + "," + item.Titel + "," + item.Vorname + "," + item.Nachname + "," + item.Adresse + "," + item.PLZ + "," + item.Ort + "," + item.Mobil + "," + item.Festnetz + "," + item.FaxNummer + "," + item.Email + "," + item.Wartungsvertrag + "," + item.Vertragsabschluss + "," + item.Techniker + "\n ");
                    }

                }
                MessageBox.Show("Der Bericht ist Fertig und befindet sich auf: " + pfad + "\\" + filename);
            }
            catch (Exception ex)
            {
                nk_klasse.ErrorMessage("write_result_to_csv WV_by_Kunde_Result", ex);
            }
        }
        private string getFileDateTime()
        {
            string fileDateTime = DateTime.Now.Day.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Year.ToString() + "_" + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString();
            return fileDateTime;
        }

        private void btn_zurücksetzen_Click(object sender, EventArgs e)
        {
            mtb_bis_jahr_Abgasmess.Text = "";
            mtb_bis_jahr_NG.Text = "";
            mtb_bis_jahr_RG.Text = "";
            mtb_bis_jahr_WV.Text = "";
            mtb_bis_jahr_WV_Techniker.Text = "";
            mtb_bis_monat_Abgasmess.Text = "";
            mtb_bis_monat_NG.Text = "";
            mtb_bis_monat_RG.Text = "";
            mtb_bis_monat_WV.Text = "";
            mtb_bis_monat_WV_Techniker.Text = "";
            mtb_bis_tag_Abgasmess.Text = "";
            mtb_bis_Tag_NG.Text = "";
            mtb_bis_Tag_RG.Text = "";
            mtb_bis_Tag_WV.Text = "";
            mtb_bis_Tag_WV_Techniker.Text = "";
            mtb_von_jahr_Abgasmess.Text = "";
            mtb_von_jahr_NG.Text = "";
            mtb_von_jahr_RG.Text = "";
            mtb_von_Jahr_WV.Text = "";
            mtb_von_jahr_WV_Techniker.Text = "";
            mtb_von_monat_Abgasmess.Text = "";
            mtb_von_monat_NG.Text = "";
            mtb_von_monat_RG.Text = "";
            mtb_von_Monat_WV.Text = "";
            mtb_von_monat_WV_Techniker.Text = "";
            mtb_von_tag_Abgasmess.Text = "";
            mtb_von_tag_NG.Text = "";
            mtb_von_tag_RG.Text = "";
            mtb_von_Tag_WV.Text = "";
            mtb_von_tag_WV_Techniker.Text = "";

            rb_Kunde_mit_WV.Checked = true;
        }

        private bool check_Datum(string von, string bis)
        {
            bool b = true;
            DateTime result = DateTime.Now;
            if (!DateTime.TryParse(von, out result))
            {
                MessageBox.Show("Stellen Sie sicher das, dass von Ihnen eingegebene Datum " + von + " ein echhtes Datum ist.");
                b = false;
            }
            if (!DateTime.TryParse(bis, out result))
            {
                MessageBox.Show("Stellen Sie sicher das, dass von Ihnen eingegebene Datum " + bis + " ein echhtes Datum ist.");
                b = false;
            }
            return b;
        }
    }
}
